home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / halfworm.s < prev    next >
Text File  |  1997-01-31  |  16KB  |  1,009 lines

  1. ItsAHalfWorm:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  
  10.  move.w #44*256+49,14(a0)
  11.  move.w #90*256+100,6(a0)
  12.  
  13.  move.b worry(a0),d0
  14.  move.b d0,d1
  15.  and.w #128,d1
  16.  and.b #127,d0
  17.  sub.b #1,d0
  18.  bge.s .oknn
  19.  move.b #0,d0
  20. .oknn: 
  21.  add.b d0,d1
  22.  move.b d1,worry(a0)
  23.  
  24.  move.w (a0),CollId
  25.  move.w #80,extlen
  26.  move.b #1,awayfromwall
  27.  
  28.  move.l #20*256,StepUpVal
  29.  move.l #20*256,StepDownVal
  30.  move.l #200*128,thingheight
  31.  move.l #4,deadframe
  32.  move.w #27,screamsound
  33.  move.w #100,nasheight
  34.  clr.b gotgun
  35.  move.w 12(a0),d2
  36.  bge.s .stillalive
  37. .notthisone:
  38.  rts
  39.  
  40. .stillalive:
  41.  
  42.  tst.b numlives(a0)
  43.  bgt .notdying
  44.  
  45.  move.w ThirdTimer(a0),d1
  46.  sub.w TempFrames,d1
  47.  bge.s .noneg
  48.  move.w #0,d1
  49. .noneg:
  50.  move.w d1,ThirdTimer(a0)
  51.  
  52.  move.w .dyinganim(pc,d1.w*2),10(a0)
  53.  
  54.  move.b #0,numlives(a0)
  55.  move.l ZoneAdds,a1
  56.  move.l (a1,d2.w*4),a1
  57.  add.l LEVELDATA,a1
  58.  
  59.  move.l ToZoneFloor(a1),d0
  60.  tst.b ObjInTop(a0)
  61.  beq.s .notintopp
  62.  move.l ToUpperFloor(a1),d0
  63. .notintopp:
  64.  asr.l #7,d0
  65.  sub.w #100,d0
  66.  move.w d0,4(a0)
  67.   
  68.   move.w #80,d0
  69.  jsr FindCloseRoom
  70.  rts
  71.  
  72. .dyinganim:
  73.  dcb.w 6,20
  74.  dcb.w 10,19
  75.  dcb.w 10,18
  76.  
  77. .notdying: 
  78.  
  79.  move.w 12(a0),d2
  80.  move.l ZoneAdds,a5
  81.  move.l (a5,d2.w*4),d0
  82.  add.l LEVELDATA,d0
  83.  move.l d0,objroom
  84.  
  85.  jsr ViewpointToDraw
  86.  
  87.  asl.l #2,d0
  88.  add.w alframe+2,d0
  89.  add.l #$d0000,d0
  90.  
  91.  move.l d0,8(a0)
  92.  
  93.  move.w #0,DEFAULTMODE
  94.  move.w #2,RESPONSEMODE
  95.  move.w #0,RETREATMODE
  96.  move.w #1,FOLLOWUPMODE
  97.  
  98.  move.w #4,prowlspeed
  99.  move.w #8,responsespeed
  100.  move.w #8,retreatspeed
  101.  move.w #10,followupspeed
  102.  move.w #20,FOLLOWUPTIMER
  103.  move.w #15,REACTIONTIME
  104.  
  105.  move.w #9,Samplenum
  106.  move.b #5,SHOTTYPE
  107.  move.b #10,SHOTPOWER
  108.  move.w #16,SHOTSPEED
  109.  move.w #3,SHOTSHIFT
  110.  move.w #700,SHOTOFFMULT
  111.  move.l #-10*128,SHOTYOFF
  112.  
  113.  
  114.  jsr AIROUTINE
  115.  
  116.  move.w #-20,d0
  117.  move.w newx,d1
  118.  move.w newz,d2
  119.  move.w 12(a0),d3
  120.  move.w Facing(a0),d4
  121.  jsr BRIGHTENPOINTSANGLE
  122.  
  123.  
  124.  rts
  125.  
  126. GIBBLE:
  127.  
  128.  tst.b 17(a0)
  129.  beq.s .cantseeplayer
  130.  tst.w ThirdTimer(a0)
  131.  ble HalfWormAttack
  132.  move.w TempFrames,d0
  133.  sub.w d0,ThirdTimer(a0)
  134.  bge .waitandsee
  135.  move.w #0,ThirdTimer(a0)
  136.  bra .waitandsee
  137.  
  138. .cantseeplayer:
  139.  
  140.  jsr GetRand
  141.  lsr.w #4,d0
  142.  and.w #63,d0
  143.  add.w #20,d0
  144.  move.w d0,ThirdTimer(a0)
  145.  
  146. .waitandsee:
  147.  
  148.  move.w #30,FourthTimer(a0)
  149.  
  150.  move.w 12(a0),d2
  151.  move.l ZoneAdds,a5
  152.  move.l (a5,d2.w*4),d0
  153.  add.l LEVELDATA,d0
  154.  move.l d0,objroom
  155.  
  156.  bsr ViewpointToDraw
  157.  
  158.  asl.l #2,d0
  159.  add.w alframe+2,d0
  160.  add.l #$000d0000,d0
  161.  move.l d0,8(a0)
  162.  
  163.  move.w 4(a0),d0
  164.  sub.w #100,d0
  165.  ext.l d0
  166.  asl.l #7,d0
  167.  move.l d0,newy
  168.  move.l d0,oldy
  169.  
  170.  move.w 12(a0),FromZone
  171.  bsr CheckTeleport
  172.  tst.b OKTEL
  173.  beq.s .notel
  174.  move.l floortemp,d0
  175.  asr.l #7,d0
  176.  add.w d0,4(a0)
  177.  bra .nochangedir
  178. .notel:
  179.  
  180.  move.w maxspd(a0),d2
  181.  muls TempFrames,d2
  182.  move.w d2,speed
  183.  move.w Facing(a0),d0
  184.  move.b ObjInTop(a0),StoodInTop
  185.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  186.  jsr GoInDirection
  187.  move.w #%1000000000,wallflags
  188.  
  189.  move.l #%1111111110111100001,CollideFlags
  190.  bsr Collision
  191.  tst.b hitwall
  192.  beq.s .canmove
  193.  
  194.  move.w oldx,newx
  195.  move.w oldz,newz
  196.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  197.  bra .hitathing
  198.  
  199. .canmove:
  200.  
  201.  clr.b wallbounce
  202.  jsr MoveObject
  203.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  204.  move.b StoodInTop,ObjInTop(a0)
  205.  
  206. .hitathing:
  207.  
  208.  tst.b hitwall
  209.  beq.s .nochangedir
  210.  move.w #-1,ObjTimer(a0)
  211. .nochangedir
  212.  
  213.  move.l objroom,a2
  214.  move.w (a2),12(a0)
  215.  move.w newx,(a1)
  216.  move.w newz,4(a1)
  217.  
  218.  move.w (a2),d0
  219.  move.l #ZoneBrightTable,a5
  220.  move.l (a5,d0.w*4),d0
  221.  tst.b ObjInTop(a0)
  222.  bne.s .okbit
  223.  swap d0
  224. .okbit:
  225.  move.w d0,2(a0)
  226.  
  227.  move.l ToZoneFloor(a2),d0
  228.  tst.b ObjInTop(a0)
  229.  beq.s .notintop
  230.  move.l ToUpperFloor(a2),d0
  231. .notintop:
  232.  asr.l #7,d0
  233.  sub.w #100,d0
  234.  move.w d0,4(a0)
  235.  
  236.  moveq #0,d2
  237.  move.b damagetaken(a0),d2
  238.  beq .noscream
  239.  
  240.  asr.b #2,d2
  241.  bne.s .notovercoat
  242.  moveq #1,d2
  243. .notovercoat:
  244.  
  245.  sub.b d2,numlives(a0)
  246.  bgt .notdeadyet
  247.  
  248.  cmp.b #1,d2
  249.  ble .noexplode
  250.  
  251.  movem.l d0-d7/a0-a6,-(a7)
  252.  sub.l ObjectPoints,a1
  253.  add.l #ObjRotated,a1
  254.  move.l (a1),Noisex
  255.  move.w #300,Noisevol
  256.  move.w #14,Samplenum
  257.  move.b #1,chanpick
  258.  clr.b notifplaying
  259.  st backbeat
  260.  move.b 1(a0),IDNUM
  261.  jsr MakeSomeNoise
  262.  movem.l (a7)+,d0-d7/a0-a6
  263.  
  264.  movem.l d0-d7/a0-a6,-(a7)
  265.  move.w #0,d0
  266.  asr.w #2,d2
  267.  tst.w d2
  268.  bgt.s .ko
  269.  moveq #1,d2
  270. .ko:
  271.  move.w #31,d3
  272.  jsr ExplodeIntoBits
  273.  movem.l (a7)+,d0-d7/a0-a6
  274.  
  275.  cmp.b #80,d2
  276.  blt .noexplode
  277.  
  278.  move.w #-1,12(a0)
  279.  rts
  280.  
  281. .noexplode:
  282.  
  283.  movem.l d0-d7/a0-a6,-(a7)
  284.  sub.l ObjectPoints,a1
  285.  add.l #ObjRotated,a1
  286.  move.l (a1),Noisex
  287.  move.w #200,Noisevol
  288.  move.w screamsound,Samplenum
  289.  move.b #1,chanpick
  290.  clr.b notifplaying
  291.  st backbeat
  292.  move.b 1(a0),IDNUM
  293.  jsr MakeSomeNoise
  294.  movem.l (a7)+,d0-d7/a0-a6
  295.  
  296.  move.w #25,ThirdTimer(a0)
  297.   move.w #80,d0
  298.  jsr FindCloseRoom
  299.  
  300.  rts
  301.  
  302. .notdeadyet:
  303.  clr.b damagetaken(a0)
  304.  movem.l d0-d7/a0-a6,-(a7)
  305.  sub.l ObjectPoints,a1
  306.  add.l #ObjRotated,a1
  307.  move.l (a1),Noisex
  308.  move.w #200,Noisevol
  309.  move.w screamsound,Samplenum
  310.  move.b #1,chanpick
  311.  clr.b notifplaying
  312.  move.b 1(a0),IDNUM
  313.  st backbeat
  314.  jsr MakeSomeNoise
  315.  movem.l (a7)+,d0-d7/a0-a6
  316.  
  317.  
  318.  
  319. .noscream
  320.  
  321.  
  322.  move.w TempFrames,d0
  323.  sub.w d0,ObjTimer(a0)
  324.  bge.s .keepsamedir
  325.  
  326.  jsr GetRand
  327.  and.w #8190,d0
  328.  move.w d0,Facing(a0)
  329.  move.w #50,ObjTimer(a0)
  330.  
  331. .keepsamedir:
  332.  
  333.  move.w TempFrames,d0
  334.  sub.w d0,SecTimer(a0)
  335.  bge.s .nohiss
  336.  
  337.  jsr GetRand
  338.  lsr.w #6,d0
  339.  and.w #1,d0
  340.  add.w #17,d0
  341.  movem.l d0-d7/a0-a6,-(a7)
  342.  sub.l ObjectPoints,a1
  343.  add.l #ObjRotated,a1
  344.  move.l (a1),Noisex
  345.  move.w #100,Noisevol
  346.  move.w d0,Samplenum
  347.  move.b #1,chanpick
  348.  clr.b notifplaying
  349.  move.b 1(a0),IDNUM
  350.  st backbeat
  351.  jsr MakeSomeNoise
  352.  movem.l (a7)+,d0-d7/a0-a6
  353.  
  354.  Jsr GetRand
  355.  lsr.w #6,d0
  356.  and.w #255,d0
  357.  add.w #300,d0
  358.  move.w d0,SecTimer(a0)
  359.  
  360. .nohiss:
  361.  
  362.  move.b ObjInTop(a0),ViewerTop
  363.  move.b PLR1_StoodInTop,TargetTop
  364.  move.l PLR1_Roompt,ToRoom
  365.  move.l objroom,FromRoom
  366.  move.w newx,Viewerx
  367.  move.w newz,Viewerz
  368.  move.w PLR1_xoff,Targetx
  369.  move.w PLR1_zoff,Targetz
  370.  move.l PLR1_yoff,d0
  371.  asr.l #7,d0
  372.  move.w d0,Targety
  373.  move.w 4(a0),Viewery
  374.  jsr CanItBeSeen
  375.  
  376.  clr.b 17(a0)
  377.  
  378.  tst.b CanSee
  379.  beq .carryonprowling
  380.  
  381.  move.b #1,17(a0)
  382.  
  383. .carryonprowling:
  384.  
  385.  move.b ObjInTop(a0),ViewerTop
  386.  move.b PLR2_StoodInTop,TargetTop
  387.  move.l PLR2_Roompt,ToRoom
  388.  move.l objroom,FromRoom
  389.  move.w newx,Viewerx
  390.  move.w newz,Viewerz
  391.  move.w PLR2_xoff,Targetx
  392.  move.w PLR2_zoff,Targetz
  393.  move.l PLR2_yoff,d0
  394.  asr.l #7,d0
  395.  move.w d0,Targety
  396.  move.w 4(a0),Viewery
  397.  jsr CanItBeSeen
  398.  
  399.  tst.b CanSee
  400.  beq .carryonprowling2
  401.  
  402.  or.b #2,17(a0)
  403.  
  404. .carryonprowling2:
  405.  
  406.  move.w #80,d0
  407.  jsr FindCloseRoom
  408.  
  409.  rts
  410.  
  411. HalfWormAttack:
  412.  
  413.  move.w 12(a0),d2
  414.  move.l ZoneAdds,a5
  415.  move.l (a5,d2.w*4),d0
  416.  add.l LEVELDATA,d0
  417.  move.l d0,objroom
  418.  
  419.  btst #0,17(a0)
  420.  beq HalfWormAttackPLR2
  421.  btst #1,17(a0)
  422.  beq HalfWormAttackPLR1
  423.  
  424.  move.l ObjectPoints,a1
  425.  move.w (a0),d0
  426.  move.w (a1,d0.w*8),d1
  427.  move.w 4(a1,d0.w*8),d2
  428.  
  429.  move.w PLR1_xoff,d3
  430.  move.w PLR1_zoff,d4
  431.  sub.w d1,d3
  432.  sub.w d2,d4
  433.  muls d3,d3
  434.  muls d4,d4
  435.  add.l d4,d3
  436.  move.w PLR2_xoff,d4
  437.  move.w PLR2_zoff,d5
  438.  sub.w d1,d4
  439.  sub.w d2,d5
  440.  muls d4,d4
  441.  muls d5,d5
  442.  add.l d5,d4
  443.  cmp.l d3,d4
  444.  ble HalfWormAttackPLR2
  445.  
  446.  
  447. HalfWormAttackPLR1:
  448.  
  449.  
  450.  move.w TempFrames,d0
  451.  sub.w d0,FourthTimer(a0)
  452.  bgt.s .oktoshoot
  453.  move.w #50,ThirdTimer(a0)
  454. .oktoshoot:
  455.  
  456.  move.w 12(a0),d2
  457.  move.l ZoneAdds,a5
  458.  move.l (a5,d2.w*4),d0
  459.  add.l LEVELDATA,d0
  460.  move.l d0,objroom
  461.  
  462.  bsr ViewpointToDraw
  463.  
  464.  asl.l #2,d0
  465.  bne.s .notflfl
  466.  move.l #16,d0
  467. .notflfl:
  468.  
  469.  add.l #$d0000,d0
  470.  move.l d0,8(a0)
  471.  
  472.  move.w PLR1_xoff,newx
  473.  move.w PLR1_zoff,newz
  474.  move.w (a0),d1
  475.  move.l #ObjRotated,a6
  476.  move.l ObjectPoints,a1
  477.  lea (a1,d1.w*8),a1
  478.  lea (a6,d1.w*8),a6
  479.  move.w (a1),oldx
  480.  move.w 4(a1),oldz
  481.  move.w maxspd(a0),d2
  482.  muls.w TempFrames,d2
  483.  move.w d2,speed
  484.  move.w #80,Range
  485.  move.w 4(a0),d0
  486.  ext.l d0
  487.  asl.l #7,d0
  488.  sub.l #100*128,d0
  489.  move.l d0,newy
  490.  move.l d0,oldy
  491.  
  492.  move.b ObjInTop(a0),StoodInTop
  493.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  494.  clr.b canshove
  495.  clr.b GotThere
  496.  jsr HeadTowardsAng
  497.  move.w #%1000000000,wallflags
  498.  
  499.   
  500.  clr.b wallbounce
  501.  Jsr MoveObject
  502.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  503.  move.b StoodInTop,ObjInTop(a0)
  504.  
  505.  move.w AngRet,Facing(a0)
  506.  
  507.  move.l objroom,a2
  508.  move.w (a2),12(a0)
  509.  move.w oldx,(a1)
  510.  move.w oldz,4(a1)
  511.  
  512.  move.w (a2),d0
  513.  move.l #ZoneBrightTable,a5
  514.  move.l (a5,d0.w*4),d0
  515.  tst.b ObjInTop(a0)
  516.  bne.s .okbit
  517.  swap d0
  518. .okbit:
  519.  move.w d0,2(a0)
  520.  
  521.  move.l ToZoneFloor(a2),d0
  522.  tst.b ObjInTop(a0)
  523.  beq.s .notintop
  524.  move.l ToUpperFloor(a2),d0
  525. .notintop:
  526.  asr.l #7,d0
  527.  sub.w #100,d0
  528.  move.w d0,4(a0)
  529.  
  530.  
  531.  moveq #0,d2
  532.  move.b damagetaken(a0),d2
  533.  beq .noscream
  534.  
  535.  asr.b #2,d2
  536.  bne.s .notovercoat
  537.  moveq #1,d2
  538. .notovercoat:
  539.  
  540.  sub.b d2,numlives(a0)
  541.  bgt .notdeadyet
  542.  
  543.  cmp.b #1,d2
  544.  ble .noexplode
  545.  
  546.  movem.l d0-d7/a0-a6,-(a7)
  547.  sub.l ObjectPoints,a1
  548.  add.l #ObjRotated,a1
  549.  move.l (a1),Noisex
  550.  move.w #300,Noisevol
  551.  move.w #14,Samplenum
  552.  move.b #1,chanpick
  553.  clr.b notifplaying
  554.  st backbeat
  555.  move.b 1(a0),IDNUM
  556.  jsr MakeSomeNoise
  557.  movem.l (a7)+,d0-d7/a0-a6
  558.  
  559.  movem.l d0-d7/a0-a6,-(a7)
  560.  move.w #0,d0
  561.  asr.w #2,d2
  562.  tst.w d2
  563.  bgt.s .ko
  564.  moveq #1,d2
  565. .ko:
  566.  move.w #31,d3
  567.  jsr ExplodeIntoBits
  568.  movem.l (a7)+,d0-d7/a0-a6
  569.  
  570.  cmp.b #80,d2
  571.  blt .noexplode
  572.  
  573.  move.w #-1,12(a0)
  574.  rts
  575.  
  576. .noexplode:
  577.  
  578.  movem.l d0-d7/a0-a6,-(a7)
  579.  sub.l ObjectPoints,a1
  580.  add.l #ObjRotated,a1
  581.  move.l (a1),Noisex
  582.  move.w #200,Noisevol
  583.  move.w screamsound,Samplenum
  584.  move.b #1,chanpick
  585.  clr.b notifplaying
  586.  st backbeat
  587.  move.b 1(a0),IDNUM
  588.  jsr MakeSomeNoise
  589.  movem.l (a7)+,d0-d7/a0-a6
  590.  
  591.  move.w #25,ThirdTimer(a0)
  592.  move.w #80,d0
  593.  jsr FindCloseRoom
  594.  
  595.  rts
  596.  
  597. .notdeadyet:
  598.  clr.b damagetaken(a0)
  599.  movem.l d0-d7/a0-a6,-(a7)
  600.  sub.l ObjectPoints,a1
  601.  add.l #ObjRotated,a1
  602.  move.l (a1),Noisex
  603.  move.w #200,Noisevol
  604.  move.w screamsound,Samplenum
  605.  move.b #1,chanpick
  606.  clr.b notifplaying
  607.  move.b 1(a0),IDNUM
  608.  st backbeat
  609.  jsr MakeSomeNoise
  610.  movem.l (a7)+,d0-d7/a0-a6
  611.  
  612.  
  613.  
  614.  
  615. .noscream
  616.  
  617. ; tst.b canshootgun
  618. ; beq .cantshoot
  619.  cmp.w #20,FourthTimer(a0)
  620.  bge .cantshoot
  621.  
  622.  move.w #30,FourthTimer(a0)
  623.  
  624.  move.w ThirdTimer(a0),d0
  625.  sub.w #1,d0
  626.  
  627.  cmp.w #-3,d0
  628.  bge.s .noreset
  629.  
  630.  jsr GetRand
  631.  lsr.w #4,d0
  632.  and.w #255,d0
  633.  add.w #100,d0
  634.  
  635. .noreset:
  636.  move.w d0,ThirdTimer(a0)
  637.  
  638.  
  639.  move.l #$d0011,8(a0)
  640.  
  641.  move.w #9,Samplenum
  642.  move.b #5,SHOTTYPE
  643.  move.b #10,SHOTPOWER
  644.  move.w #16,SHOTSPEED
  645.  move.w #3,SHOTSHIFT
  646.  move.b ObjInTop(a0),SHOTINTOP
  647.  move.w #700,SHOTOFFMULT
  648.  move.l #-10*128,SHOTYOFF
  649.  move.w #-100,2(a0)
  650.  
  651.  jsr FireAtPlayer1
  652.  
  653. .cantshoot:
  654.  
  655.  
  656.  move.w TempFrames,d0
  657.  sub.w d0,SecTimer(a0)
  658.  bge.s .nohiss
  659.  
  660.  movem.l d0-d7/a0-a6,-(a7)
  661.  sub.l ObjectPoints,a1
  662.  add.l #ObjRotated,a1
  663.  move.l (a1),Noisex
  664.  move.w #100,Noisevol
  665.  move.w #16,Samplenum
  666.  move.b #1,chanpick
  667.  clr.b notifplaying
  668.  move.b 1(a0),IDNUM
  669.  st backbeat
  670.  jsr MakeSomeNoise
  671.  movem.l (a7)+,d0-d7/a0-a6
  672.  
  673.  Jsr GetRand
  674.  lsr.w #6,d0
  675.  and.w #255,d0
  676.  add.w #300,d0
  677.  move.w d0,SecTimer(a0)
  678.  
  679. .nohiss:
  680.  
  681.  move.b ObjInTop(a0),ViewerTop
  682.  move.b PLR1_StoodInTop,TargetTop
  683.  move.l PLR1_Roompt,ToRoom
  684.  move.l objroom,FromRoom
  685.  move.w newx,Viewerx
  686.  move.w newz,Viewerz
  687.  move.w PLR1_xoff,Targetx
  688.  move.w PLR1_zoff,Targetz
  689.  move.l PLR1_yoff,d0
  690.  asr.l #7,d0
  691.  move.w d0,Targety
  692.  move.w 4(a0),Viewery
  693.  jsr CanItBeSeen
  694.  
  695.  clr.b 17(a0)
  696.  tst.b CanSee
  697.  beq .carryonprowling
  698.  
  699.  move.b #1,17(a0)
  700.  
  701. .carryonprowling:
  702.  
  703.  cmp.b #'n',mors
  704.  beq.s .carryonprowling2
  705.  
  706.  
  707.  move.b ObjInTop(a0),ViewerTop
  708.  move.b PLR2_StoodInTop,TargetTop
  709.  move.l PLR2_Roompt,ToRoom
  710.  move.l objroom,FromRoom
  711.  move.w newx,Viewerx
  712.  move.w newz,Viewerz
  713.  move.w PLR2_xoff,Targetx
  714.  move.w PLR2_zoff,Targetz
  715.  move.l PLR2_yoff,d0
  716.  asr.l #7,d0
  717.  move.w d0,Targety
  718.  move.w 4(a0),Viewery
  719.  jsr CanItBeSeen
  720.  
  721.  tst.b CanSee
  722.  beq .carryonprowling2
  723.  
  724.  or.b #2,17(a0)
  725.  
  726. .carryonprowling2:
  727.  
  728.  move.w #80,d0
  729.  jsr FindCloseRoom
  730.  
  731.  rts
  732.  
  733. *************************************************
  734.  
  735. HalfWormAttackPLR2:
  736.  
  737.  
  738.  
  739.  move.w TempFrames,d0
  740.  sub.w d0,FourthTimer(a0)
  741.  bgt.s .oktoshoot
  742.  move.w #50,ThirdTimer(a0)
  743. .oktoshoot:
  744.  
  745.  move.w 12(a0),d2
  746.  move.l ZoneAdds,a5
  747.  move.l (a5,d2.w*4),d0
  748.  add.l LEVELDATA,d0
  749.  move.l d0,objroom
  750.  
  751.  bsr ViewpointToDraw
  752.  
  753.  asl.l #2,d0
  754.  bne.s .notflfl
  755.  move.l #16,d0
  756. .notflfl:
  757.  
  758.  add.l #$d0000,d0
  759.  move.l d0,8(a0)
  760.  
  761.  move.w PLR2_xoff,newx
  762.  move.w PLR2_zoff,newz
  763.  move.w (a0),d1
  764.  move.l #ObjRotated,a6
  765.  move.l ObjectPoints,a1
  766.  lea (a1,d1.w*8),a1
  767.  lea (a6,d1.w*8),a6
  768.  move.w (a1),oldx
  769.  move.w 4(a1),oldz
  770.  move.w maxspd(a0),d2
  771.  muls.w TempFrames,d2
  772.  move.w d2,speed
  773.  move.w #80,Range
  774.  move.w 4(a0),d0
  775.  ext.l d0
  776.  asl.l #7,d0
  777.  sub.l #100*128,d0
  778.  move.l d0,newy
  779.  move.l d0,oldy
  780.  
  781.  move.b ObjInTop(a0),StoodInTop
  782.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  783.  clr.b canshove
  784.  clr.b GotThere
  785.  jsr HeadTowardsAng
  786.  move.w #%1000000000,wallflags
  787.  
  788.   
  789.  clr.b wallbounce
  790.  Jsr MoveObject
  791.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  792.  move.b StoodInTop,ObjInTop(a0)
  793.  
  794.  move.w AngRet,Facing(a0)
  795.  
  796.  move.l objroom,a2
  797.  move.w (a2),12(a0)
  798.  move.w newx,(a1)
  799.  move.w newz,4(a1)
  800.  
  801.  move.w (a2),d0
  802.  move.l #ZoneBrightTable,a5
  803.  move.l (a5,d0.w*4),d0
  804.  tst.b ObjInTop(a0)
  805.  bne.s .okbit
  806.  swap d0
  807. .okbit:
  808.  move.w d0,2(a0)
  809.  
  810.  move.l ToZoneFloor(a2),d0
  811.  tst.b ObjInTop(a0)
  812.  beq.s .notintop
  813.  move.l ToUpperFloor(a2),d0
  814. .notintop:
  815.  asr.l #7,d0
  816.  sub.w #100,d0
  817.  move.w d0,4(a0)
  818.  
  819.  move.b damagetaken(a0),d2
  820.  beq .noscream
  821.  
  822.  asr.b #2,d2
  823.  bne.s .notovercoat
  824.  moveq #1,d2
  825. .notovercoat:
  826.  
  827.  sub.b d2,numlives(a0)
  828.  bgt .notdeadyet
  829.  
  830. ; cmp.b #1,d2
  831. ; ble.s .noexplode
  832.  
  833.  movem.l d0-d7/a0-a6,-(a7)
  834.  sub.l ObjectPoints,a1
  835.  add.l #ObjRotated,a1
  836.  move.l (a1),Noisex
  837.  move.w #400,Noisevol
  838.  move.w #14,Samplenum
  839.  move.b #1,chanpick
  840.  clr.b notifplaying
  841.  st backbeat
  842.  move.b 1(a0),IDNUM
  843.  jsr MakeSomeNoise
  844.  movem.l (a7)+,d0-d7/a0-a6
  845.  
  846.  movem.l d0-d7/a0-a6,-(a7)
  847.  move.w #0,d0
  848.  move.w #9,d2
  849.  move.w #31,d3
  850.  jsr ExplodeIntoBits
  851.  movem.l (a7)+,d0-d7/a0-a6
  852.  move.w #-1,12(a0)
  853.  rts
  854.  
  855. .noexplode:
  856.  
  857.  movem.l d0-d7/a0-a6,-(a7)
  858.  sub.l ObjectPoints,a1
  859.  add.l #ObjRotated,a1
  860.  move.l (a1),Noisex
  861.  move.w #200,Noisevol
  862.  move.w screamsound,Samplenum
  863.  move.b #1,chanpick
  864.  clr.b notifplaying
  865.  st backbeat
  866.  move.b 1(a0),IDNUM
  867.  jsr MakeSomeNoise
  868.  movem.l (a7)+,d0-d7/a0-a6
  869.  move.l deadframe,8(a0)
  870.  move.w #80,d0
  871.  jsr FindCloseRoom
  872.  rts
  873.  
  874. .notdeadyet:
  875.  clr.b damagetaken(a0)
  876.  movem.l d0-d7/a0-a6,-(a7)
  877.  sub.l ObjectPoints,a1
  878.  add.l #ObjRotated,a1
  879.  move.l (a1),Noisex
  880.  move.w #200,Noisevol
  881.  move.w screamsound,Samplenum
  882.  move.b #1,chanpick
  883.  clr.b notifplaying
  884.  move.b 1(a0),IDNUM
  885.  st backbeat
  886.  jsr MakeSomeNoise
  887.  movem.l (a7)+,d0-d7/a0-a6
  888.  
  889. .noscream
  890.  
  891. ; tst.b canshootgun
  892. ; beq .cantshoot
  893.  cmp.w #20,FourthTimer(a0)
  894.  bge .cantshoot
  895.  
  896.  move.w #30,FourthTimer(a0)
  897.  
  898.  move.w ThirdTimer(a0),d0
  899.  sub.w #1,d0
  900.  cmp.w #-3,d0
  901.  bge.s .noreset
  902.  
  903.  jsr GetRand
  904.  lsr.w #4,d0
  905.  and.w #255,d0
  906.  add.w #100,d0
  907.  
  908. .noreset:
  909.  move.w d0,ThirdTimer(a0)
  910.  
  911.  
  912.  move.l #$d0011,8(a0)
  913.  
  914.  move.w #9,Samplenum
  915.  move.b #5,SHOTTYPE
  916.  move.b #10,SHOTPOWER
  917.  move.w #16,SHOTSPEED
  918.  move.w #3,SHOTSHIFT
  919.  move.b ObjInTop(a0),SHOTINTOP
  920.  move.w #700,SHOTOFFMULT
  921.  move.l #-10*128,SHOTYOFF
  922.  move.w #-100,2(a0)
  923.  
  924.  jsr FireAtPlayer2
  925.  
  926. .cantshoot:
  927.  
  928.  
  929.  move.w TempFrames,d0
  930.  sub.w d0,SecTimer(a0)
  931.  bge.s .nohiss
  932.  
  933.  movem.l d0-d7/a0-a6,-(a7)
  934.  sub.l ObjectPoints,a1
  935.  add.l #ObjRotated,a1
  936.  move.l (a1),Noisex
  937.  move.w #100,Noisevol
  938.  move.w #16,Samplenum
  939.  move.b #1,chanpick
  940.  clr.b notifplaying
  941.  move.b 1(a0),IDNUM
  942.  st backbeat
  943.  jsr MakeSomeNoise
  944.  movem.l (a7)+,d0-d7/a0-a6
  945.  
  946.  Jsr GetRand
  947.  lsr.w #6,d0
  948.  and.w #255,d0
  949.  add.w #300,d0
  950.  move.w d0,SecTimer(a0)
  951.  
  952. .nohiss:
  953.  
  954.  move.b ObjInTop(a0),ViewerTop
  955.  move.b PLR1_StoodInTop,TargetTop
  956.  move.l PLR1_Roompt,ToRoom
  957.  move.l objroom,FromRoom
  958.  move.w newx,Viewerx
  959.  move.w newz,Viewerz
  960.  move.w PLR1_xoff,Targetx
  961.  move.w PLR1_zoff,Targetz
  962.  move.l PLR1_yoff,d0
  963.  asr.l #7,d0
  964.  move.w d0,Targety
  965.  move.w 4(a0),Viewery
  966.  jsr CanItBeSeen
  967.  
  968.  clr.b 17(a0)
  969.  tst.b CanSee
  970.  beq .carryonprowling
  971.  
  972.  move.b #1,17(a0)
  973.  
  974. .carryonprowling:
  975.  
  976.  cmp.b #'n',mors
  977.  beq.s .carryonprowling2
  978.  
  979.  
  980.  move.b ObjInTop(a0),ViewerTop
  981.  move.b PLR2_StoodInTop,TargetTop
  982.  move.l PLR2_Roompt,ToRoom
  983.  move.l objroom,FromRoom
  984.  move.w newx,Viewerx
  985.  move.w newz,Viewerz
  986.  move.w PLR2_xoff,Targetx
  987.  move.w PLR2_zoff,Targetz
  988.  move.l PLR2_yoff,d0
  989.  asr.l #7,d0
  990.  move.w d0,Targety
  991.  move.w 4(a0),Viewery
  992.  jsr CanItBeSeen
  993.  
  994.  tst.b CanSee
  995.  beq .carryonprowling2
  996.  
  997.  or.b #2,17(a0)
  998.  
  999. .carryonprowling2:
  1000.  
  1001.  
  1002.  
  1003.  move.w #80,d0
  1004.  jsr FindCloseRoom
  1005.  
  1006.  rts
  1007.  
  1008.  
  1009.